package DAO;

import static Conexao.ConexaoBancoDeDados.getConexao;
import Model.BeanProduto;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Renata
 */
public class DAOProduto {

    public DAOProduto() {
    }

    private BeanProduto GetProduto(ResultSet rs) {
        try {
            if (rs.first()) {
                BeanProduto produto = new BeanProduto();
                produto.setID(rs.getInt("ID"));
                produto.setDescricao(rs.getString("descricao"));
                produto.setMODELOID(rs.getInt("MODELOID"));
                produto.setFABRICANTEID(rs.getInt("FABRICANTEID"));
                produto.setTIPO_PRODUTOID(rs.getInt("TIPO_PRODUTOID"));
                return produto;
            } else {
                //Não retornou nenhuma linha
                return null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

    private ArrayList<BeanProduto> GetProdutos(ResultSet rs) {
        try {
            if (rs.first()) {
                ArrayList<BeanProduto> retorno = new ArrayList<>();
                BeanProduto produto = new BeanProduto();
                produto.setID(rs.getInt("ID"));
                produto.setDescricao(rs.getString("descricao"));
                produto.setMODELOID(rs.getInt("MODELOID"));
                produto.setFABRICANTEID(rs.getInt("FABRICANTEID"));
                produto.setTIPO_PRODUTOID(rs.getInt("TIPO_PRODUTOID"));
                retorno.add(produto);
                while (rs.next()) {
                    produto = new BeanProduto();
                    produto.setID(rs.getInt("ID"));
                    produto.setDescricao(rs.getString("descricao"));
                    produto.setMODELOID(rs.getInt("MODELOID"));
                    produto.setFABRICANTEID(rs.getInt("FABRICANTEID"));
                    produto.setTIPO_PRODUTOID(rs.getInt("TIPO_PRODUTOID"));
                    retorno.add(produto);
                }
                return retorno;
            } else {
                //Não retornou nenhuma linha
                return null;
            }
        } catch (SQLException e) {
            e.printStackTrace();
            return null;
        }
    }

    public BeanProduto RetornaProduto(int ID) {
        try (Connection conn = getConexao()) {
            String sql;
            sql = "SELECT * FROM produto WHERE ID = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, String.valueOf(ID));

            ResultSet rs = ps.executeQuery();
            return GetProduto(rs);
        } catch (SQLException e) {
            return null;
        }
    }
    
    public BeanProduto RetornaProduto(String descricao) {
        try (Connection conn = getConexao()) {
            String sql;
            sql = "SELECT * FROM produto WHERE descricao LIKE ? LIMIT 1";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, "%" + descricao + "%");

            ResultSet rs = ps.executeQuery();
            return GetProduto(rs);
        } catch (SQLException e) {
            return null;
        }
    }

    public void Atualizar(BeanProduto produto) {
        try (Connection conn = getConexao()) {
            String sql;
            sql = "UPDATE produto SET descricao = ?, TIPO_PRODUTOID = ?, FABRICANTEID = ?, MODELOID = ? WHERE ID = ?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, String.valueOf(produto.getDescricao()));
            ps.setString(2, String.valueOf(produto.getTIPO_PRODUTOID()));
            ps.setString(3, String.valueOf(produto.getFABRICANTEID()));
            ps.setString(4, String.valueOf(produto.getMODELOID()));
            ps.setString(5, String.valueOf(produto.getID()));
            ps.executeQuery();
        } catch (SQLException e) {
        }
    }

    public void Inserir(BeanProduto produto) {
        try (Connection conn = getConexao()) {
            String sql;
            sql = "INSERT INTO produto VALUES(?, ?, ?, ?, ?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, String.valueOf(produto.getID()));
            ps.setString(2, String.valueOf(produto.getDescricao()));
            ps.setString(3, String.valueOf(produto.getTIPO_PRODUTOID()));
            ps.setString(4, String.valueOf(produto.getFABRICANTEID()));
            ps.setString(5, String.valueOf(produto.getMODELOID()));
            ps.executeQuery();
        } catch (SQLException e) {
        }
    }

    public void Remover(BeanProduto produto) {
        try (Connection conn = getConexao()) {
            String sql;
            sql = "DELETE produto WHERE ID = ?)";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, String.valueOf(produto.getID()));
            ps.executeQuery();
        } catch (SQLException e) {
        }
    }
}